using SheLife.Domain.Entities;
using SheLife.Domain.Interfaces;
using SheLife.Domain.Interfaces.Repositories;

namespace SheLife.Domain.Interfaces
{
    /// <summary>
    /// 工作单元接口
    /// </summary>
    public interface IUnitOfWork : IDisposable
    {
        IUserRepository UserRepository { get; }
        IMenstrualCycleRepository MenstrualCycleRepository { get; }
        IMenstrualSymptomRepository MenstrualSymptomRepository { get; }
        IMenstrualNoteRepository MenstrualNoteRepository { get; }
        IBasalBodyTemperatureRepository BasalBodyTemperatureRepository { get; }
        IDietRecordRepository DietRecordRepository { get; }
        IDietNutrientRepository DietNutrientRepository { get; }
        IRecipeRepository RecipeRepository { get; }
        IRecipeIngredientRepository RecipeIngredientRepository { get; }
        IRecipeStepRepository RecipeStepRepository { get; }
        IRecipeNutrientRepository RecipeNutrientRepository { get; }
        IUserRecipeRepository UserRecipeRepository { get; }
        ISkincareRecordRepository SkincareRecordRepository { get; }
        ISkincareProductRepository SkincareProductRepository { get; }
        ISkincareRecordProductRepository SkincareRecordProductRepository { get; }
        ISkincareProductIngredientRepository SkincareProductIngredientRepository { get; }
        ISkincareProductReviewRepository SkincareProductReviewRepository { get; }
        ISkincareProductReminderRepository SkincareProductReminderRepository { get; }
        ISkincareSkinAnalysisRepository SkincareSkinAnalysisRepository { get; }
        IClothingRepository ClothingRepository { get; }
        IOutfitRepository OutfitRepository { get; }
        IOutfitClothingRepository OutfitClothingRepository { get; }
        IOutfitRecordRepository OutfitRecordRepository { get; }
        IOutfitTemplateRepository OutfitTemplateRepository { get; }
        IOutfitTemplateItemRepository OutfitTemplateItemRepository { get; }
        IUserOutfitTemplateRepository UserOutfitTemplateRepository { get; }
        IOutfitSuggestionRepository OutfitSuggestionRepository { get; }
        IGrowthGoalRepository GrowthGoalRepository { get; }
        IGrowthGoalTaskRepository GrowthGoalTaskRepository { get; }
        IGrowthGoalRecordRepository GrowthGoalRecordRepository { get; }
        IGrowthHabitRepository GrowthHabitRepository { get; }
        IGrowthHabitRecordRepository GrowthHabitRecordRepository { get; }
        IGrowthHabitReminderRepository GrowthHabitReminderRepository { get; }
        IGrowthHabitPartnerRepository GrowthHabitPartnerRepository { get; }
        IGrowthHabitChallengeRepository GrowthHabitChallengeRepository { get; }
        IGrowthHabitChallengeRecordRepository GrowthHabitChallengeRecordRepository { get; }
        IGrowthHabitRewardRepository GrowthHabitRewardRepository { get; }
        IGrowthHabitStatisticsRepository GrowthHabitStatisticsRepository { get; }
        IGrowthGoalTemplateRepository GrowthGoalTemplateRepository { get; }
        IGrowthHabitTemplateRepository GrowthHabitTemplateRepository { get; }
        ICommunityPostRepository CommunityPostRepository { get; }
        ICommunityPostCommentRepository CommunityPostCommentRepository { get; }
        ICommunityPostLikeRepository CommunityPostLikeRepository { get; }
        ICommunityPostFavoriteRepository CommunityPostFavoriteRepository { get; }
        ICommunityPostReportRepository CommunityPostReportRepository { get; }
        ICommunityCategoryRepository CommunityCategoryRepository { get; }
        ICommunityTagRepository CommunityTagRepository { get; }
        ICommunityPostTagRepository CommunityPostTagRepository { get; }
        ICommunityUserFollowRepository CommunityUserFollowRepository { get; }
        ICommunityUserBlockRepository CommunityUserBlockRepository { get; }
        ICommunityPostStatisticsRepository CommunityPostStatisticsRepository { get; }
        ISystemConfigRepository SystemConfigRepository { get; }
        ISystemLogRepository SystemLogRepository { get; }
        ISystemNotificationRepository SystemNotificationRepository { get; }
        ISystemTaskRepository SystemTaskRepository { get; }
        ISystemVersionRepository SystemVersionRepository { get; }
        ISystemBackupRepository SystemBackupRepository { get; }
        ISystemCacheRepository SystemCacheRepository { get; }
        ISystemPermissionRepository SystemPermissionRepository { get; }
        IUserPermissionRepository UserPermissionRepository { get; }
        ISystemRoleRepository SystemRoleRepository { get; }
        IUserRoleRepository UserRoleRepository { get; }
        IRolePermissionRepository RolePermissionRepository { get; }
        ISystemUserRepository SystemUserRepository { get; }
        ISystemMenuRepository SystemMenuRepository { get; }
        IRoleMenuRepository RoleMenuRepository { get; }
        ISystemDictionaryRepository SystemDictionaryRepository { get; }
        ISystemRegionRepository SystemRegionRepository { get; }
        ISystemMessageTemplateRepository SystemMessageTemplateRepository { get; }

        Task<int> SaveChangesAsync();
        Task BeginTransactionAsync();
        Task CommitTransactionAsync();
        Task RollbackTransactionAsync();
    }
}